// Copyright (c) Microsoft Corporation.  All rights reserved.

#pragma once

namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Direct2D1 {

    namespace D2D = Microsoft::WindowsAPICodePack::DirectX::Direct2D1;

/// <summary>
/// <para>(Also see DirectX SDK: D2D1_POINT_2F)</para>
///</summary>
public value struct Point2F
{
public:


    /// <summary>
    /// Constructor for the Point2F value type
    /// </summary>
    /// <param name="x">Initializes the x field.</param>
    /// <param name="y">Initializes the y field.</param>
    Point2F(
        FLOAT x,
        FLOAT y
        );


    /// <summary>
    /// The x field.
    /// </summary>
    FLOAT X;

    /// <summary>
    /// The y field.
    /// </summary>
    FLOAT Y;

internal:

    void CopyFrom(
         __in const D2D1_POINT_2F &point_2f
         );

    void CopyTo(
        __out D2D1_POINT_2F *ppoint_2f
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_SIZE_F)</para>
///</summary>
public value struct SizeF
{
public:


    /// <summary>
    /// Constructor for the SizeF value type
    /// </summary>
    /// <param name="width">Initializes the width field.</param>
    /// <param name="height">Initializes the height field.</param>
    SizeF(
        FLOAT width,
        FLOAT height
        );


    /// <summary>
    /// The width field.
    /// </summary>
    FLOAT Width;

    /// <summary>
    /// The height field.
    /// </summary>
    FLOAT Height;

internal:

    void CopyFrom(
         __in const D2D1_SIZE_F &size_f
         );

    void CopyTo(
        __out D2D1_SIZE_F *psize_f
        );

};


/// <summary>
/// Describes an arc that is defined as part of a path.
/// <para>(Also see DirectX SDK: D2D1_ARC_SEGMENT)</para>
///</summary>
public value struct ArcSegment
{
public:


    /// <summary>
    /// Constructor for the ArcSegment value type
    /// </summary>
    /// <param name="point">Initializes the point field.</param>
    /// <param name="size">Initializes the size field.</param>
    /// <param name="rotationangle">Initializes the rotationAngle field.</param>
    /// <param name="sweepdirection">Initializes the sweepDirection field.</param>
    /// <param name="arcsize">Initializes the arcSize field.</param>
    ArcSegment(
        Point2F point,
        SizeF size,
        FLOAT rotationangle,
        D2D::SweepDirection sweepdirection,
        D2D::ArcSize arcsize
        );


    /// <summary>
    /// The point field.
    /// </summary>
    Point2F Point;

    /// <summary>
    /// The size field.
    /// </summary>
    SizeF Size;

    /// <summary>
    /// The rotationAngle field.
    /// </summary>
    FLOAT RotationAngle;

    /// <summary>
    /// The sweepDirection field.
    /// </summary>
    D2D::SweepDirection SweepDirection;

    /// <summary>
    /// The arcSize field.
    /// </summary>
    D2D::ArcSize ArcSize;

internal:

    void CopyFrom(
         __in const D2D1_ARC_SEGMENT &arc_segment
         );

    void CopyTo(
        __out D2D1_ARC_SEGMENT *parc_segment
        );

};


/// <summary>
/// Describes a cubic bezier in a path.
/// <para>(Also see DirectX SDK: D2D1_BEZIER_SEGMENT)</para>
///</summary>
public value struct BezierSegment
{
public:


    /// <summary>
    /// Constructor for the BezierSegment value type
    /// </summary>
    /// <param name="point1">Initializes the point1 field.</param>
    /// <param name="point2">Initializes the point2 field.</param>
    /// <param name="point3">Initializes the point3 field.</param>
    BezierSegment(
        Point2F point1,
        Point2F point2,
        Point2F point3
        );


    /// <summary>
    /// The point1 field.
    /// </summary>
    Point2F Point1;

    /// <summary>
    /// The point2 field.
    /// </summary>
    Point2F Point2;

    /// <summary>
    /// The point3 field.
    /// </summary>
    Point2F Point3;

internal:

    void CopyFrom(
         __in const D2D1_BEZIER_SEGMENT &bezier_segment
         );

    void CopyTo(
        __out D2D1_BEZIER_SEGMENT *pbezier_segment
        );

};


/// <summary>
/// Describes a triangle.
/// <para>(Also see DirectX SDK: D2D1_TRIANGLE)</para>
///</summary>
public value struct Triangle
{
public:


    /// <summary>
    /// Constructor for the Triangle value type
    /// </summary>
    /// <param name="point1">Initializes the point1 field.</param>
    /// <param name="point2">Initializes the point2 field.</param>
    /// <param name="point3">Initializes the point3 field.</param>
    Triangle(
        Point2F point1,
        Point2F point2,
        Point2F point3
        );


    /// <summary>
    /// The point1 field.
    /// </summary>
    Point2F Point1;

    /// <summary>
    /// The point2 field.
    /// </summary>
    Point2F Point2;

    /// <summary>
    /// The point3 field.
    /// </summary>
    Point2F Point3;

internal:

    void CopyFrom(
         __in const D2D1_TRIANGLE &triangle
         );

    void CopyTo(
        __out D2D1_TRIANGLE *ptriangle
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_MATRIX_3X2_F)</para>
///</summary>
public value struct Matrix3x2F
{
public:


    /// <summary>
    /// Constructor for the Matrix3x2F value type
    /// </summary>
    /// <param name="_11">Initializes the _11 field.</param>
    /// <param name="_12">Initializes the _12 field.</param>
    /// <param name="_21">Initializes the _21 field.</param>
    /// <param name="_22">Initializes the _22 field.</param>
    /// <param name="_31">Initializes the _31 field.</param>
    /// <param name="_32">Initializes the _32 field.</param>
    Matrix3x2F(
        FLOAT _11,
        FLOAT _12,
        FLOAT _21,
        FLOAT _22,
        FLOAT _31,
        FLOAT _32
        );


    /// <summary>
    /// The _11 field.
    /// </summary>
    FLOAT _11;

    /// <summary>
    /// The _12 field.
    /// </summary>
    FLOAT _12;

    /// <summary>
    /// The _21 field.
    /// </summary>
    FLOAT _21;

    /// <summary>
    /// The _22 field.
    /// </summary>
    FLOAT _22;

    /// <summary>
    /// The _31 field.
    /// </summary>
    FLOAT _31;

    /// <summary>
    /// The _32 field.
    /// </summary>
    FLOAT _32;

internal:

    void CopyFrom(
         __in const D2D1_MATRIX_3X2_F &matrix_3x2_f
         );

    void CopyTo(
        __out D2D1_MATRIX_3X2_F *pmatrix_3x2_f
        );

};


/// <summary>
/// Basic definition of a tag
///</summary>
public value struct Tags
{
public:

    Tags(
        UINT64 tag1,
        UINT64 tag2
        ) : m_tag1(tag1), m_tag2(tag2)
    {
    }

    property UINT64 Tag1
    {
        UINT64 get()
        {
            return m_tag1;
        }

        void set(UINT64 tag1)
        {
            m_tag1 = tag1;
        }
    }

    property UINT64 Tag2
    {
        UINT64 get()
        {
            return m_tag2;
        }

        void set(UINT64 tag2)
        {
            m_tag2 = tag2;
        }
    }

private:
    UINT64 m_tag1;
    UINT64 m_tag2;
};  


/// <summary>
/// Allows the drawing state to be atomically created. This also specifies the drawing
/// state that is saved into an IDrawingStateBlock object.
/// <para>(Also see DirectX SDK: D2D1_DRAWING_STATE_DESCRIPTION)</para>
///</summary>
public value struct DrawingStateDescription
{
public:


    /// <summary>
    /// Constructor for the DrawingStateDescription value type
    /// </summary>
    /// <param name="antialiasmode">Initializes the antialiasMode field.</param>
    /// <param name="textantialiasmode">Initializes the textAntialiasMode field.</param>
    /// <param name="tags">Initializes the tags field.</param>
    /// <param name="transform">Initializes the transform field.</param>
    DrawingStateDescription(
        D2D::AntialiasMode antialiasmode,
        D2D::TextAntialiasMode textantialiasmode,
        D2D::Tags tags,
        Matrix3x2F transform
        );


    /// <summary>
    /// The antialiasMode field.
    /// </summary>
    D2D::AntialiasMode AntialiasMode;

    /// <summary>
    /// The textAntialiasMode field.
    /// </summary>
    D2D::TextAntialiasMode TextAntialiasMode;

    /// <summary>
    /// The tags field.
    /// </summary>
    D2D::Tags Tags;

    /// <summary>
    /// The transform field.
    /// </summary>
    Matrix3x2F Transform;

internal:

    void CopyFrom(
         __in const D2D1_DRAWING_STATE_DESCRIPTION &drawing_state_description
         );

    void CopyTo(
        __out D2D1_DRAWING_STATE_DESCRIPTION *pdrawing_state_description
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_ELLIPSE)</para>
///</summary>
public value struct Ellipse
{
public:


    /// <summary>
    /// Constructor for the Ellipse value type
    /// </summary>
    /// <param name="point">Initializes the point field.</param>
    /// <param name="radiusx">Initializes the radiusX field.</param>
    /// <param name="radiusy">Initializes the radiusY field.</param>
    Ellipse(
        Point2F point,
        FLOAT radiusx,
        FLOAT radiusy
        );


    /// <summary>
    /// The point field.
    /// </summary>
    Point2F Point;

    /// <summary>
    /// The radiusX field.
    /// </summary>
    FLOAT RadiusX;

    /// <summary>
    /// The radiusY field.
    /// </summary>
    FLOAT RadiusY;

internal:

    void CopyFrom(
         __in const D2D1_ELLIPSE &ellipse
         );

    void CopyTo(
        __out D2D1_ELLIPSE *pellipse
        );

};


/// <summary>
/// Allows additional parameters for factory creation.
/// <para>(Also see DirectX SDK: D2D1_FACTORY_OPTIONS)</para>
///</summary>
public value struct FactoryOptions
{
public:


    /// <summary>
    /// Constructor for the FactoryOptions value type
    /// </summary>
    /// <param name="debuglevel">Initializes the debugLevel field.</param>
    FactoryOptions(
        D2D::DebugLevel debuglevel
        );


    /// <summary>
    /// Requests a certain level of debugging information from the debug layer. This parameter
    /// is ignored if the debug layer DLL is not present.
    /// </summary>
    D2D::DebugLevel DebugLevel;

internal:

    void CopyFrom(
         __in const D2D1_FACTORY_OPTIONS &factory_options
         );

    void CopyTo(
        __out D2D1_FACTORY_OPTIONS *pfactory_options
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_COLOR_F)</para>
///</summary>
public value struct ColorF
{
public:


    /// <summary>
    /// Constructor for the ColorF value type
    /// </summary>
    /// <param name="r">Initializes the r field.</param>
    /// <param name="g">Initializes the g field.</param>
    /// <param name="b">Initializes the b field.</param>
    /// <param name="a">Initializes the a field.</param>
    ColorF(
        FLOAT r,
        FLOAT g,
        FLOAT b,
        FLOAT a
        );


    /// <summary>
    /// The r field.
    /// </summary>
    FLOAT R;

    /// <summary>
    /// The g field.
    /// </summary>
    FLOAT G;

    /// <summary>
    /// The b field.
    /// </summary>
    FLOAT B;

    /// <summary>
    /// The a field.
    /// </summary>
    FLOAT A;

internal:

    void CopyFrom(
         __in const D2D1_COLOR_F &color_f
         );

    void CopyTo(
        __out D2D1_COLOR_F *pcolor_f
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_GRADIENT_STOP)</para>
///</summary>
public value struct GradientStop
{
public:


    /// <summary>
    /// Constructor for the GradientStop value type
    /// </summary>
    /// <param name="position">Initializes the position field.</param>
    /// <param name="color">Initializes the color field.</param>
    GradientStop(
        FLOAT position,
        ColorF color
        );


    /// <summary>
    /// The position field.
    /// </summary>
    FLOAT Position;

    /// <summary>
    /// The color field.
    /// </summary>
    ColorF Color;

internal:

    void CopyFrom(
         __in const D2D1_GRADIENT_STOP &gradient_stop
         );

    void CopyTo(
        __out D2D1_GRADIENT_STOP *pgradient_stop
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_SIZE_U)</para>
///</summary>
public value struct SizeU
{
public:


    /// <summary>
    /// Constructor for the SizeU value type
    /// </summary>
    /// <param name="width">Initializes the width field.</param>
    /// <param name="height">Initializes the height field.</param>
    SizeU(
        UINT32 width,
        UINT32 height
        );


    /// <summary>
    /// The width field.
    /// </summary>
    UINT32 Width;

    /// <summary>
    /// The height field.
    /// </summary>
    UINT32 Height;

internal:

    void CopyFrom(
         __in const D2D1_SIZE_U &size_u
         );

    void CopyTo(
        __out D2D1_SIZE_U *psize_u
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_HWND_RENDER_TARGET_PROPERTIES)</para>
///</summary>
public value struct HwndRenderTargetProperties
{
public:


    /// <summary>
    /// Constructor for the HwndRenderTargetProperties value type
    /// </summary>
    /// <param name="windowHandle">Initializes the hwnd field.</param>
    /// <param name="pixelsize">Initializes the pixelSize field.</param>
    /// <param name="presentoptions">Initializes the presentOptions field.</param>
    HwndRenderTargetProperties(
        IntPtr windowHandle,
        SizeU pixelsize,
        D2D::PresentOptions presentoptions
        );


    /// <summary>
    /// The hwnd field.
    /// </summary>
    IntPtr WindowHandle;

    /// <summary>
    /// The pixelSize field.
    /// </summary>
    SizeU PixelSize;

    /// <summary>
    /// The presentOptions field.
    /// </summary>
    D2D::PresentOptions PresentOptions;

internal:

    void CopyFrom(
         __in const D2D1_HWND_RENDER_TARGET_PROPERTIES &hwnd_render_target_properties
         );

    void CopyTo(
        __out D2D1_HWND_RENDER_TARGET_PROPERTIES *phwnd_render_target_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_RECT_F)</para>
///</summary>
public value struct RectF
{
public:


    /// <summary>
    /// Constructor for the RectF value type
    /// </summary>
    /// <param name="left">Initializes the left field.</param>
    /// <param name="top">Initializes the top field.</param>
    /// <param name="right">Initializes the right field.</param>
    /// <param name="bottom">Initializes the bottom field.</param>
    RectF(
        FLOAT left,
        FLOAT top,
        FLOAT right,
        FLOAT bottom
        );


    /// <summary>
    /// The left field.
    /// </summary>
    FLOAT left;

    /// <summary>
    /// The top field.
    /// </summary>
    FLOAT top;

    /// <summary>
    /// The right field.
    /// </summary>
    FLOAT right;

    /// <summary>
    /// The bottom field.
    /// </summary>
    FLOAT bottom;

internal:

    void CopyFrom(
         __in const D2D1_RECT_F &rect_f
         );

    void CopyTo(
        __out D2D1_RECT_F *prect_f
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_LAYER_PARAMETERS)</para>
///</summary>
public value struct LayerParameters
{
public:


    /// <summary>
    /// Constructor for the LayerParameters value type
    /// </summary>
    /// <param name="contentbounds">Initializes the contentBounds field.</param>
    /// <param name="geometricmask">Initializes the geometricMask field.</param>
    /// <param name="maskantialiasmode">Initializes the maskAntialiasMode field.</param>
    /// <param name="masktransform">Initializes the maskTransform field.</param>
    /// <param name="opacity">Initializes the opacity field.</param>
    /// <param name="opacitybrush">Initializes the opacityBrush field.</param>
    /// <param name="layeroptions">Initializes the layerOptions field.</param>
    LayerParameters(
        RectF contentbounds,
        Geometry ^geometricmask,
        AntialiasMode maskantialiasmode,
        Matrix3x2F masktransform,
        FLOAT opacity,
        Brush ^opacitybrush,
        LayerOptions layeroptions
        );


    /// <summary>
    /// The rectangular clip that will be applied to the layer. The clip is affected by the
    /// world transform. Content outside of the content bounds will not render.
    /// </summary>
    RectF ContentBounds;

    /// <summary>
    /// A general mask that can be optionally applied to the content. Content not inside
    /// the fill of the mask will not be rendered.
    /// </summary>
    Geometry ^GeometricMask;

    /// <summary>
    /// Specifies whether the mask should be aliased or antialiased.
    /// </summary>
    AntialiasMode MaskAntialiasMode;

    /// <summary>
    /// An additional transform that may be applied to the mask in addition to the current
    /// world transform.
    /// </summary>
    Matrix3x2F MaskTransform;

    /// <summary>
    /// The opacity with which all of the content in the layer will be blended back to the
    /// target when the layer is popped.
    /// </summary>
    FLOAT Opacity;

    /// <summary>
    /// An additional brush that can be applied to the layer. Only the opacity channel is
    /// sampled from this brush and multiplied both with the layer content and the over-all
    /// layer opacity.
    /// </summary>
    Brush ^OpacityBrush;

    /// <summary>
    /// Specifies if ClearType will be rendered into the layer.
    /// </summary>
    LayerOptions Options;

internal:

    void CopyFrom(
         __in const D2D1_LAYER_PARAMETERS &layer_parameters
         );

    void CopyTo(
        __out D2D1_LAYER_PARAMETERS *player_parameters
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_QUADRATIC_BEZIER_SEGMENT)</para>
///</summary>
public value struct QuadraticBezierSegment
{
public:


    /// <summary>
    /// Constructor for the QuadraticBezierSegment value type
    /// </summary>
    /// <param name="point1">Initializes the point1 field.</param>
    /// <param name="point2">Initializes the point2 field.</param>
    QuadraticBezierSegment(
        Point2F point1,
        Point2F point2
        );


    /// <summary>
    /// The point1 field.
    /// </summary>
    Point2F Point1;

    /// <summary>
    /// The point2 field.
    /// </summary>
    Point2F Point2;

internal:

    void CopyFrom(
         __in const D2D1_QUADRATIC_BEZIER_SEGMENT &quadratic_bezier_segment
         );

    void CopyTo(
        __out D2D1_QUADRATIC_BEZIER_SEGMENT *pquadratic_bezier_segment
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_ROUNDED_RECT)</para>
///</summary>
public value struct RoundedRect
{
public:


    /// <summary>
    /// Constructor for the RoundedRect value type
    /// </summary>
    /// <param name="rect">Initializes the rect field.</param>
    /// <param name="radiusx">Initializes the radiusX field.</param>
    /// <param name="radiusy">Initializes the radiusY field.</param>
    RoundedRect(
        RectF rect,
        FLOAT radiusx,
        FLOAT radiusy
        );


    /// <summary>
    /// The rect field.
    /// </summary>
    RectF Rect;

    /// <summary>
    /// The radiusX field.
    /// </summary>
    FLOAT RadiusX;

    /// <summary>
    /// The radiusY field.
    /// </summary>
    FLOAT RadiusY;

internal:

    void CopyFrom(
         __in const D2D1_ROUNDED_RECT &rounded_rect
         );

    void CopyTo(
        __out D2D1_ROUNDED_RECT *prounded_rect
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_BRUSH_PROPERTIES)</para>
///</summary>
public value struct BrushProperties
{
public:


    /// <summary>
    /// Constructor for the BrushProperties value type
    /// </summary>
    /// <param name="opacity">Initializes the opacity field.</param>
    /// <param name="transform">Initializes the transform field.</param>
    BrushProperties(
        FLOAT opacity,
        Matrix3x2F transform
        );


    /// <summary>
    /// The opacity field.
    /// </summary>
    FLOAT Opacity;

    /// <summary>
    /// The transform field.
    /// </summary>
    Matrix3x2F Transform;

internal:

    void CopyFrom(
         __in const D2D1_BRUSH_PROPERTIES &brush_properties
         );

    void CopyTo(
        __out D2D1_BRUSH_PROPERTIES *pbrush_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES)</para>
///</summary>
public value struct LinearGradientBrushProperties
{
public:


    /// <summary>
    /// Constructor for the LinearGradientBrushProperties value type
    /// </summary>
    /// <param name="startpoint">Initializes the startPoint field.</param>
    /// <param name="endpoint">Initializes the endPoint field.</param>
    LinearGradientBrushProperties(
        Point2F startpoint,
        Point2F endpoint
        );


    /// <summary>
    /// The startPoint field.
    /// </summary>
    Point2F StartPoint;

    /// <summary>
    /// The endPoint field.
    /// </summary>
    Point2F EndPoint;

internal:

    void CopyFrom(
         __in const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES &linear_gradient_brush_properties
         );

    void CopyTo(
        __out D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *plinear_gradient_brush_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_BITMAP_BRUSH_PROPERTIES)</para>
///</summary>
public value struct BitmapBrushProperties
{
public:


    /// <summary>
    /// Constructor for the BitmapBrushProperties value type
    /// </summary>
    /// <param name="extendmodex">Initializes the extendModeX field.</param>
    /// <param name="extendmodey">Initializes the extendModeY field.</param>
    /// <param name="interpolationmode">Initializes the interpolationMode field.</param>
    BitmapBrushProperties(
        ExtendMode extendmodex,
        ExtendMode extendmodey,
        BitmapInterpolationMode interpolationmode
        );


    /// <summary>
    /// The extendModeX field.
    /// </summary>
    ExtendMode ExtendModeX;

    /// <summary>
    /// The extendModeY field.
    /// </summary>
    ExtendMode ExtendModeY;

    /// <summary>
    /// The interpolationMode field.
    /// </summary>
    BitmapInterpolationMode InterpolationMode;

internal:

    void CopyFrom(
         __in const D2D1_BITMAP_BRUSH_PROPERTIES &bitmap_brush_properties
         );

    void CopyTo(
        __out D2D1_BITMAP_BRUSH_PROPERTIES *pbitmap_brush_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_PIXEL_FORMAT)</para>
///</summary>
public value struct PixelFormat
{
public:

    /// <summary>
    /// Constructor for the PixelFormat value type
    /// </summary>
    /// <param name="format">Initializes the format field.</param>
    /// <param name="alphamode">Initializes the alphaMode field.</param>
    PixelFormat(
        Microsoft::WindowsAPICodePack::DirectX::DXGI::Format format,
        D2D::AlphaMode alphamode
        );


    /// <summary>
    /// The format field.
    /// </summary>
    Microsoft::WindowsAPICodePack::DirectX::DXGI::Format Format;

    /// <summary>
    /// The alphaMode field.
    /// </summary>
    AlphaMode AlphaMode;

internal:

    void CopyFrom(
         __in const D2D1_PIXEL_FORMAT &pixel_format
         );

    void CopyTo(
        __out D2D1_PIXEL_FORMAT *ppixel_format
        );

};


/// <summary>
/// Properties, aside from the width, that allow geometric penning to be specified.
/// <para>(Also see DirectX SDK: D2D1_STROKE_STYLE_PROPERTIES)</para>
///</summary>
public value struct StrokeStyleProperties
{
public:


    /// <summary>
    /// Constructor for the StrokeStyleProperties value type
    /// </summary>
    /// <param name="startcap">Initializes the startCap field.</param>
    /// <param name="endcap">Initializes the endCap field.</param>
    /// <param name="dashcap">Initializes the dashCap field.</param>
    /// <param name="linejoin">Initializes the lineJoin field.</param>
    /// <param name="miterlimit">Initializes the miterLimit field.</param>
    /// <param name="dashstyle">Initializes the dashStyle field.</param>
    /// <param name="dashoffset">Initializes the dashOffset field.</param>
    StrokeStyleProperties(
        CapStyle startcap,
        CapStyle endcap,
        CapStyle dashcap,
        LineJoin linejoin,
        FLOAT miterlimit,
        DashStyle dashstyle,
        FLOAT dashoffset
        );


    /// <summary>
    /// The startCap field.
    /// </summary>
    CapStyle StartCap;

    /// <summary>
    /// The endCap field.
    /// </summary>
    CapStyle EndCap;

    /// <summary>
    /// The dashCap field.
    /// </summary>
    CapStyle DashCap;

    /// <summary>
    /// The lineJoin field.
    /// </summary>
    LineJoin LineJoin;

    /// <summary>
    /// The miterLimit field.
    /// </summary>
    FLOAT MiterLimit;

    /// <summary>
    /// The dashStyle field.
    /// </summary>
    DashStyle DashStyle;

    /// <summary>
    /// The dashOffset field.
    /// </summary>
    FLOAT DashOffset;

internal:

    void CopyFrom(
         __in const D2D1_STROKE_STYLE_PROPERTIES &stroke_style_properties
         );

    void CopyTo(
        __out D2D1_STROKE_STYLE_PROPERTIES *pstroke_style_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES)</para>
///</summary>
public value struct RadialGradientBrushProperties
{
public:


    /// <summary>
    /// Constructor for the RadialGradientBrushProperties value type
    /// </summary>
    /// <param name="center">Initializes the center field.</param>
    /// <param name="gradientoriginoffset">Initializes the gradientOriginOffset field.</param>
    /// <param name="radiusx">Initializes the radiusX field.</param>
    /// <param name="radiusy">Initializes the radiusY field.</param>
    RadialGradientBrushProperties(
        Point2F center,
        Point2F gradientoriginoffset,
        FLOAT radiusx,
        FLOAT radiusy
        );


    /// <summary>
    /// The center field.
    /// </summary>
    Point2F Center;

    /// <summary>
    /// The gradientOriginOffset field.
    /// </summary>
    Point2F GradientOriginOffset;

    /// <summary>
    /// The radiusX field.
    /// </summary>
    FLOAT RadiusX;

    /// <summary>
    /// The radiusY field.
    /// </summary>
    FLOAT RadiusY;

internal:

    void CopyFrom(
         __in const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES &radial_gradient_brush_properties
         );

    void CopyTo(
        __out D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *pradial_gradient_brush_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_RENDER_TARGET_PROPERTIES)</para>
///</summary>
public value struct RenderTargetProperties
{
public:


    /// <summary>
    /// Constructor for the RenderTargetProperties value type
    /// </summary>
    /// <param name="type">Initializes the type field.</param>
    /// <param name="pixelformat">Initializes the pixelFormat field.</param>
    /// <param name="dpix">Initializes the dpiX field.</param>
    /// <param name="dpiy">Initializes the dpiY field.</param>
    /// <param name="usage">Initializes the usage field.</param>
    /// <param name="minlevel">Initializes the minLevel field.</param>
    RenderTargetProperties(
        RenderTargetType type,
        PixelFormat pixelformat,
        FLOAT dpix,
        FLOAT dpiy,
        RenderTargetUsage usage,
        FeatureLevel minlevel
        );


    /// <summary>
    /// The type field.
    /// </summary>
    RenderTargetType Type;

    /// <summary>
    /// The pixelFormat field.
    /// </summary>
    PixelFormat PixelFormat;

    /// <summary>
    /// The dpiX field.
    /// </summary>
    FLOAT DpiX;

    /// <summary>
    /// The dpiY field.
    /// </summary>
    FLOAT DpiY;

    /// <summary>
    /// The usage field.
    /// </summary>
    RenderTargetUsage Usage;

    /// <summary>
    /// The minLevel field.
    /// </summary>
    FeatureLevel MinLevel;

internal:

    void CopyFrom(
         __in const D2D1_RENDER_TARGET_PROPERTIES &render_target_properties
         );

    void CopyTo(
        __out D2D1_RENDER_TARGET_PROPERTIES *prender_target_properties
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_BITMAP_PROPERTIES)</para>
///</summary>
public value struct BitmapProperties
{
public:


    /// <summary>
    /// Constructor for the BitmapProperties value type
    /// </summary>
    /// <param name="pixelformat">Initializes the pixelFormat field.</param>
    /// <param name="dpix">Initializes the dpiX field.</param>
    /// <param name="dpiy">Initializes the dpiY field.</param>
    BitmapProperties(
        PixelFormat pixelformat,
        FLOAT dpix,
        FLOAT dpiy
        );


    /// <summary>
    /// The pixelFormat field.
    /// </summary>
    PixelFormat PixelFormat;

    /// <summary>
    /// The dpiX field.
    /// </summary>
    FLOAT DpiX;

    /// <summary>
    /// The dpiY field.
    /// </summary>
    FLOAT DpiY;

internal:

    void CopyFrom(
         __in const D2D1_BITMAP_PROPERTIES &bitmap_properties
         );

    void CopyTo(
        __out D2D1_BITMAP_PROPERTIES *pbitmap_properties
        );

};



/// <summary>
/// <para>(Also see DirectX SDK: D2D1_POINT_2U)</para>
///</summary>
public value struct Point2U
{
public:


    /// <summary>
    /// Constructor for the Point2U value type
    /// </summary>
    /// <param name="x">Initializes the x field.</param>
    /// <param name="y">Initializes the y field.</param>
    Point2U(
        UINT32 x,
        UINT32 y
        );


    /// <summary>
    /// The x field.
    /// </summary>
    UINT32 X;

    /// <summary>
    /// The y field.
    /// </summary>
    UINT32 Y;

internal:

    void CopyFrom(
         __in const D2D1_POINT_2U &point_2u
         );

    void CopyTo(
        __out D2D1_POINT_2U *ppoint_2u
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: D2D1_RECT_U)</para>
///</summary>
public value struct RectU
{
public:


    /// <summary>
    /// Constructor for the RectU value type
    /// </summary>
    /// <param name="left">Initializes the left field.</param>
    /// <param name="top">Initializes the top field.</param>
    /// <param name="right">Initializes the right field.</param>
    /// <param name="bottom">Initializes the bottom field.</param>
    RectU(
        UINT32 left,
        UINT32 top,
        UINT32 right,
        UINT32 bottom
        );


    /// <summary>
    /// The left field.
    /// </summary>
    UINT32 left;

    /// <summary>
    /// The top field.
    /// </summary>
    UINT32 top;

    /// <summary>
    /// The right field.
    /// </summary>
    UINT32 right;

    /// <summary>
    /// The bottom field.
    /// </summary>
    UINT32 bottom;

internal:

    void CopyFrom(
         __in const D2D1_RECT_U &rect_u
         );

    void CopyTo(
        __out D2D1_RECT_U *prect_u
        );

};


/// <summary>
/// <para>(Also see DirectX SDK: RECT)</para>
///</summary>
public value struct RECT
{
public:

    /// <summary>
    /// Constructor for the RECT value type
    /// </summary>
    /// <param name="left">Initializes the left field.</param>
    /// <param name="top">Initializes the top field.</param>
    /// <param name="right">Initializes the right field.</param>
    /// <param name="bottom">Initializes the bottom field.</param>
    RECT(
        LONG left,
        LONG top,
        LONG right,
        LONG bottom
        );


    /// <summary>
    /// The left field.
    /// </summary>
    LONG Left;

    /// <summary>
    /// The top field.
    /// </summary>
    LONG Top;

    /// <summary>
    /// The right field.
    /// </summary>
    LONG Right;

    /// <summary>
    /// The bottom field.
    /// </summary>
    LONG Bottom;

internal:

    void CopyFrom(
         __in const ::RECT &rect
         );

    void CopyTo(
        __out ::RECT *prect
        );

};


/// <summary>
/// Define the DPI x and y values
///</summary>
public value struct DpiF
{
public:


    /// <summary>
    /// Constructor for the DpiF value type
    /// </summary>
    /// <param name="x">Initializes the x field.</param>
    /// <param name="y">Initializes the y field.</param>
    DpiF(
        FLOAT x,
        FLOAT y
        );


    /// <summary>
    /// The x field.
    /// </summary>
    FLOAT X;

    /// <summary>
    /// The y field.
    /// </summary>
    FLOAT Y;

};

} } } }

